#include<bits/stdc++.h>
using namespace std;
using ll =long long int;
#if 0
#include<bits/stdc++.h>
using namespace std;
using ll =long long int;
//贪心做法 就是上升的区间的利润都要拿到就是没两天如果是升序我们就有利润
//在同一天我们卖可以在买
int main()
{
    ll n;
    cin>>n;
    vector<ll>price(n);
    for(auto&ch:price)cin>>ch;
    ll ret=0;
    for(int i=1;i<n;i++)
    {
        if(price[i]-price[i-1]>0) ret+=price[i]-price[i-1];
    }
    cout<<ret<<endl;
    return 0;
}
///////////////////////////////////////////////
//空间优化
//////////////////////////////////////////////
int main()
{
    ll n;
    cin>>n;
    vector<ll>price(n);
    for(auto&ch:price)cin>>ch;
    vector<vector<ll>>dp(n,vector<ll>(2,0));
    ll prev0=0;
    ll prev1=-price[0];
    ll cur0,cur1;
    for(int i=1;i<n;i++)
    {
        cur0=max(prev0,prev1+price[i]);
        cur1=max(prev0-price[i],prev1);
        prev0=cur0;
        prev1=cur1;
    }
    cout<<max(cur0,cur1)<<endl;
    return 0;
}

////////////////////////////////////////////
//动态规划
////////////////////////////////////////////
#include<bits/stdc++.h>
using namespace std;
using ll =long long int;
int main()
{
    ll n;
    cin>>n;
    vector<ll>price(n);
    for(auto&ch:price)cin>>ch;
    vector<vector<ll>>dp(n,vector<ll>(2,0));
    dp[0][1]=-price[0];//dp[0][1]代表第0天手里有股票的最大利润
    //printf("dp[%ld][0]:%ld dp[%ld][1]:%ld\n",0,dp[0][0],0,dp[0][1]);
    for(int i=1;i<n;i++)
    {
        dp[i][0]=max(dp[i-1][0],dp[i-1][1]+price[i]);
        dp[i][1]=max(dp[i-1][0]-price[i],dp[i-1][1]);
        //printf("dp[%ld][0]:%ld dp[%ld][1]:%ld\n",i,dp[i][0],i,dp[i][1]);
    }
    cout<<max(dp[n-1][0],dp[n-1][1])<<endl;
    return 0;
}
#endif